串操作指令应用(MOVS/CMPS/SCAS/LODS/STOS) 您所在的位置:网站首页 汇编语言lods byte ptr 串操作指令应用(MOVS/CMPS/SCAS/LODS/STOS)

串操作指令应用(MOVS/CMPS/SCAS/LODS/STOS)

2024-05-10 22:44| 来源: 网络整理| 查看: 265

串操作指令(MOVS/CMPS/SCAS/LODS/STOS)的使用:

1.串传送指令

使用

上述三种格式的串传送指令在执行前都需要预先设置地址指针DS:SI和ES:DI,设置传送方向,如果要重复执行,

还需把重复次数放入CX并使用重复前缀。

MOVS指令常与重复前缀REP联合使用,以简化程序,提高程序运行速度。

将2000H:1200H地址开始的200个字节传送到6000H:2000H开始的存储单元中。

程序段如下:

        MOV  AX,2000H

        MOV  DS,AX      ;设置源串段地址

        MOV  AX,6000H

        MOV  ES,AX      ;设置目的串段地址

        MOV  SI,1200H   ;设置源串偏移地址

        MOV  DI,2000H   ;设置目的串偏移地址

        MOV  CX,100     ;串长度送CX

        CLD              ;DF←0,方向为从低地址到高地址

        REP  MOVSB     ;每次传送一个字节,并自动修改地址指针及CX内容

                          ;若修改后CX≠0就重复执行

2.串比较指令CMPS

比较字符串STR1和字符串STR2是否相同,如果不同,将STR1中不相等字符的地址送BX。两个字符串的长度均为200个字节。

程序如下:(假定DS和ES已设置好)

        LEA  SI,STR1    ;SI←源串首地址

        LEA  DI,STR2    ;DI←目的串首地址

        MOV  CX,200     ;CX←串长度

 

        CLD              ;DF←0,增地址方向

 

        REPZ CMPSB       ;对两个串逐个字符进行比较,直到遇到不同的字符或比较完

 

        JZ   STOP        ;若所有字符都相同,则转STOP

        DEC  SI         ;否则,使SI指向不相等的字符(CMPS指令已对SI自动加1

        MOV  BX,SI      ;BX←不相等单元的地址

  STOP:

3.串扫描指令SCAS

 

ES:2000H单元开始存放了一个长度为100的字符串,寻找其中有无字符“S”。若有则记下扫描次数(次数放CNT单元),并记下存放“A”的地址(地址放ADDR单元)。程序段如下:

        MOV  DI,2000H    ;DI←目的串首地址

        MOV  CX,100      ;CX←串长度

        MOV  AL,"S"      ;AL←关键字“S”

        CLD               ;DF←0,增地址方向

        REPNZ SCASB       ;扫描字符串,直到找到“S”或扫描结束

        JZ   FOUND        ;若找到则转移

 

        MOV  DI,0        ;没找到,使DI=0

        JMP  DONE

FOUND:DEC  DI           ;使DI指向找到的“S”字符(SCAS指令已对DI自动加1)

        MOV  ADDR,DI     ;将“S”字符的地址送ADDR单元

        SUB  DI,2000H    ;用“S”字符的地址减去首地址得到扫描次数

 DONE:MOV  CNT,DI      ;将搜索次数送CNT单元

 4.串装入指令LODS

. 使用

   上述三种格式的串装入指令在执行前都需要预先设置源串指针DS:SI和方向标志DF。LODS指令一般不使用重复前缀,因为每重复一次AL或AX中内容将被后一次所装入的字符所取代,前一次装入的内容被覆盖

 MEM1为首地址的存储器中有10个字节数据,编写程序将这10个数都乘2

(假定DS已设置好)

        LEA  SI,MEM1   ;SI←源串首地址

        MOV  CX,10     ;CX←串长度

        CLD             ;DF←0

  NEXT:LODSB           ;取一个数据到AL

        ADD  AL,AL     ;乘2

        MOV  [SI-1]AL ;存回去   ;SI需要减一切记

         DEC  CX         ;CX←CX-1

        JNZ  NEXT       ;CX≠0则继续

    5.串存储指令STOS

 

使用

   上述三种格式的串存储指令在执行前都需要预先设置AL(或AX)、目的串指针DS:SI和方向标志DF。利用重复前缀REP,可对连续的存储单元写入相同的值。

 本指令常用于对某一存储区域进行初始化(初值在放AL(AX)中)。

把6000H:1200H开始的100个字节存储单元全部设置为55H。

        MOV  AX,6000H

        MOV  ES,AX      ;ES←目的串的段地址

        MOV  DI,1200H   ;DI←目的串的偏移地址

        MOV  CX,100     ;CX←串长度

        CLD              ;DF←0,增地址方向

 

        MOV  AL,55H     ;AL←55H

        REP  STOSB       ;将100个单元都写入55H  



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有